// SPDX-License-Identifier: Mulan PSL v2
/*
 * Copyright (c) 2025 Huawei Technologies Co., Ltd.
 * This software is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *         http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

use rustix::param;

#[inline]
pub fn size() -> usize {
    param::page_size()
}

#[inline]
pub fn align_up(value: usize) -> usize {
    let align = param::page_size();
    assert!(align.is_power_of_two(), "Page size must be a power of two");

    let padded = value
        .checked_add(align - 1)
        .expect("Page up operation overflowed");
    padded & !(align - 1)
}

pub fn is_aligned(value: usize) -> bool {
    (value % param::page_size()) == 0
}
